home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
pascal
/
csdudes.exe
/
PDXTBL.CPP
< prev
next >
Wrap
Text File
|
1992-03-12
|
9KB
|
348 lines
/*┌───────────────────────────────────────────────────────────────────────┐
│ │
│ Module: PDXTBL.CPP │
│ Author: Rick Kligman │
│ Purpose: Code for Base Class table which handles Paradox Engine │
│ Database stuff │
│ Last Modified: 05-17-91 00:34am │
│ │
│ Copyright 1991 Rick Kligman │
│ This code may be freely used and distributed in commercial apps │
│ provided some mention of PXBuddy++ is made in the documentation. │
│ │
│ Version 1.00 │
└───────────────────────────────────────────────────────────────────────┘ */
#include "pdxtbl.hpp"
#define Uses_MsgBox
#include <tv.h> // added for messageBox support
// ╓───────────────────────────────────────────────────────────────╖
// ║ Constructor for pxtable class ║
// ╚═══════════════════════════════════════════════════════════════╝
pxtable::pxtable()
{
first_open = 1; // this will be first time table is opened
tbl_open = 0; // table is not open
blanks_as_zeros = TRUE; // write blanks as zeros
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Destructor for pxtable class ║
// ╚═══════════════════════════════════════════════════════════════╝
pxtable::~pxtable()
{
if ( ! first_open )
delete fldptr;
if ( tbl_open )
PXTblClose(th);
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Open a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::open(char *tablename, FIELDHANDLE fh)
{
int err;
if ( *tablename != NULL) {
strcpy(tblname, tablename);
if (! first_open)
delete fldptr;
first_open = 1;
}
err = PXTblOpen(tblname, &th, fh, 0);
CKERR;
err = PXRecBufOpen(th, &rh);
if ( ! err ) {
err = PXRecBufEmpty(rh);
if ( ! err )
if ( first_open ) {
err = PXRecNFlds(th, &numflds);
if ( ! err ) {
fldptr = new absfld * [numflds + 1];
first_open = 0;
init_flds();
PXKeyNFlds(th, &keyed); // determine if table is keyed
}
}
}
if ( err )
PXTblClose(th);
else
tbl_open = 1; // table is now open
return err; // will be PXSUCCESS if everything is OK
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Close a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::close()
{
int err;
err = PXRecBufClose(rh);
CKERR;
err = PXTblClose(th);
if ( ! err )
tbl_open = 0; // table is now closed
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Read the record and then ALL fields in a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::read_rec()
{
int err;
err = recget();
CKERR;
err = read_flds();
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Read ALL fields in a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::read_flds()
{
int err;
PXNetTblRefresh(th); //aff
for (int i = 0; fldptr [i] != NULL; i++) {
err = fldptr [i]->get();
CKERR;
}
return (PXSUCCESS);
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table and then the record ║
// ╚═══════════════════════════════════════════════════════════════╝
// put
/* int pxtable::recupdate()
{
int err;
err = put_flds();
CKERR;
err = PXRecUpdate(th, rh);
return err;
}*/
// changed recupdate as per PDOX engine users guide for record locking
// pg. 85 Engine User's guide
// 2-19-92
int pxtable::recupdate()
{
int iLock;
int answer=0;
iLock = PXNetRecLock(th, &lh);
switch(iLock)
{
case PXERR_RECDELETED: answer = deletedRec();
break;
case PXSUCCESS: answer=updateRec();
break;
default: messageBox(PXErrMsg(iLock), mfError);
answer=FALSE;
break;
}
return(answer);
}
// =====================================================================
int pxtable::updateRec()
{
int answer=0;
int err;
put_flds();
if((err = PXRecUpdate(th, rh)) != PXSUCCESS)
{
messageBox(PXErrMsg(err), mfError);
answer = FALSE;
}
if((err = PXNetRecUnlock(th, lh)) != PXSUCCESS)
{
messageBox(PXErrMsg(err), mfError);
return FALSE;
}
return(answer);
}
// =====================================================================
int pxtable::deletedRec()
{
ushort iUpdate;
int answer=0, err;
iUpdate = messageBox("Another User has deleted record\nInsert Record?", mfYesButton | mfNoButton);
if(iUpdate == cmYes)
{
if((err = recappend() ) != PXSUCCESS)
{
messageBox(PXErrMsg(err), mfError);
answer = FALSE;
}
else
answer = TRUE;
}
return(answer);
}
// =====================================================================
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table and then the record ║
// ╚═══════════════════════════════════════════════════════════════╝
// put
int pxtable::recappend()
{
int err;
err = put_flds();
CKERR;
err = PXRecAppend(th, rh);
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table and then the record ║
// ╚═══════════════════════════════════════════════════════════════╝
// put
int pxtable::recinsert()
{
int err;
err = put_flds();
CKERR;
err = PXRecInsert(th, rh);
// err = recinsert();
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::put_flds()
{
int err;
for (int i = 0; fldptr [i] != NULL; i++) {
err = fldptr [i]->put();
CKERR;
}
return (PXSUCCESS);
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Get Next Record in the Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::recnext()
{
int err;
PXNetTblRefresh(th); //aff
err = PXRecNext(th);
if ( err == PXERR_ENDOFTABLE ) {
// err = PXSUCCESS;
tblmarker = TRUE;
}
else
tblmarker = FALSE;
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Get Prev Record in the Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::recprev()
{
int err;
PXNetTblRefresh(th); //aff
err = PXRecPrev(th);
if ( err == PXERR_STARTOFTABLE ) {
err = PXSUCCESS;
tblmarker = TRUE;
}
else
tblmarker = FALSE;
return err;
}
// ==================================================================
// ******** A. Frantz additions start here ***********************
// ==================================================================
int pxtable::recfirst()
{
int err;
PXNetTblRefresh(th);
err = PXRecFirst(th);
if ( err == PXERR